package utils;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import politic.Politica;

import com.algorithms.ScoredUser;

public class ListUtils {

	public static List<Integer> arrayToList(int[] ids) {

		List<Integer> results = new ArrayList<Integer>();

		if (ids != null) {
			for (int id : ids)
				results.add(Integer.valueOf(id));
		}
		return results;
	}

	/**
	 * Este metodo devuelve la primer lista pasada como parametro con los
	 * elementos de la segunda lista agregados
	 * 
	 * @param list1
	 * @param list2
	 * @return
	 */
	public static List<Integer> addElementsToList(List<Integer> list1,
			List<Integer> list2) {

		Iterator<Integer> iterator = list2.iterator();
		while (iterator.hasNext()) {
			list1.add(iterator.next());
		}
		return list1;
	}

	public static List<Integer> addElementsToListWithPolitic(
			List<Integer> list1, List<Integer> list2, Politica politica) {

		for (Integer idUsuario : list2) {
			if (politica.aceptar(idUsuario)) list1.add(idUsuario);
		}
		return list1;
	}

	public static List<Integer> eliminarOcurrencias(List<Integer> list1) {
		List<Integer> auxList = new ArrayList<Integer>();
		for (Integer auxInteger : list1) {
			if (!auxList.contains(auxInteger)) {
				auxList.add(auxInteger);
			}
		}
		return auxList;
	}

	public static List<Integer> converitScoredUsersToList(List<ScoredUser> list1) {
		List<Integer> auxList = new ArrayList<Integer>();
		for (ScoredUser auxScoredUser : list1) {
			auxList.add(auxScoredUser.getId());
		}
		return auxList;
	}

	/**
	 * Devuelve el numero de ocurrencias de la clave del segundo parametro en la
	 * lista del primer parametro
	 * 
	 * @param list
	 * @param clave
	 * @return
	 */
	public static Integer getOcurrencias(List<Integer> totalUsers, Integer clave) {
		Integer nrOcurrencias = Integer.valueOf(0);
		for (Integer aux : totalUsers) {
			if (aux.equals(clave)) nrOcurrencias++;
		}
		return nrOcurrencias;
	}

	public static double getScore(List<ScoredUser> users, int id) {
		for (ScoredUser user : users)
			if (user.getId() == id) return user.getScore();
		return 0;
	}
}